- 組合問題:
組合(Combinations) - 題號:77
題目描述:給定兩個整數 n 和 k,返回 1 ... n 中所有可能的 k 個數的組合。
def combine(n, k):
def backtrack(start, path):
if len(path) == k:
result.append(path[:])
return
for i in range(start, n + 1):
path.append(i)
backtrack(i + 1, path)
path.pop()
result = []
backtrack(1, [])
return result
- 組合總和 III - 題號:216
題目描述:找出所有相加之和為 n 的 k 個數的組合。
def combinationSum3(k, n):
def backtrack(start, target, path):
if target == 0 and len(path) == k:
result.append(path[:])
return
if target < 0 or len(path) >= k:
return
for i in range(start, 10):
path.append(i)
backtrack(i + 1, target - i, path)
path.pop()
result = []
backtrack(1, n, [])
return result
- 電話號碼的字母組合(Letter Combinations of a Phone Number) - 題號:17
題目描述:給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。
def letterCombinations(digits):
if not digits:
return []
phone_map = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
def backtrack(index, path):
if index == len(digits):
result.append(''.join(path))
return
for char in phone_map[digits[index]]:
path.append(char)
backtrack(index + 1, path)
path.pop()
result = []
backtrack(0, [])
return result
- 組合總和(Combination Sum) - 題號:39
題目描述:給定一個無重覆元素的數組 candidates 和一個目標數 target,找出 candidates 中所有可以使數字和為 target 的組合。
def combinationSum(candidates, target):
def backtrack(start, target, path):
if target == 0:
result.append(path[:])
return
if target < 0:
return
for i in range(start, len(candidates)):
path.append(candidates[i])
backtrack(i, target - candidates[i], path)
path.pop()
result = []
backtrack(0, target, [])
return result